iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Mobile Development

用Flutter Flame做遊戲!Live!系列 第 6

中秋節:簡單補充一下遊戲引擎的作用

  • 分享至 

  • xImage
  •  

「Canvas是介面形成的基礎,其實所有的UI元件裡面都只是包裝了一連串屬於自己的「如何在Canvas上繪圖」的辦法而已。」

但有些事情是上面這樣的描述無法涵蓋的。

例如「為什麼即使使用了硬體加速,我的Canvas繪製的介面效能很差、很不靈敏、動畫很拖延?」(假設真的有神人挑戰自己用Canvas設計自己的UI元件。)

因為「在Canvas上繪製」和「將Canvas送給render pipeline」這兩個動作是在同一個線程上進行的。
繪製必須要完成,才能進行render,而render也必須要完成,才能再次進行繪製。
所以「繪製」階段越複雜越耗時,「render」的次數頻率就越少,結果就是直觀的畫面會卡、頓、慢。

所以需有兩張Canvas。
一張Canvas(0)用來繪製,一張Canvas(1)用來「render」。
Canvas(0)繪製完後,會Canvas(1)來說,它只需進行「一項繪製動作」,就是「把Canvas(0)覆蓋到Canvas(1)」即可,這會大幅提升效率,以影片播放來說,流暢度通常都會有四倍的差距,如果是遊戲則會更多。


但是,第一張Canvas(1)通常是由系統提供,第二張Canvas(0)則要自己生成,取得Canvas(0)在不同的程式語言上,會有不同的難度。
以Android Native來說,那難度其實並不高。
但在Flutter上來說,那複雜度高到讓人想罵髒話。

所以,Flame遊戲引擎最大的價值就是穩定的簡化了這個步驟,讓使用者可以保證得到一個流暢的畫面輸出。


中秋節快樂。
今天就這樣。


上一篇
移動遊戲中的物體:Dragcallback和Component
下一篇
遲早會發生的事情...Collision系統
系列文
用Flutter Flame做遊戲!Live!26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言